package KK.net.Proxy
{
	import KK.Data.GameData;
	import KK.Error.ErrorInfo;
	import KK.Event.ModuleEvent;
	import KK.Event.RegisterEvent;
	import KK.Event.RegisterUserEvent;
	import KK.net.ProxyManager;
	
	import Protocol.EError;
	import Protocol.EProtocol;
	import Protocol.SError;
	
	import flash.utils.ByteArray;

	public class ErrorProxy extends Proxy
	{

		private var errProxy:Vector.<Function>;
		public function ErrorProxy()
		{
			//TODO: implement function
			super();
			init();
		}
		
		private function init():void{
			errProxy=new Vector.<Function>(EError.EError_Max,true);
			ProxyManager.RegisterCommand(EProtocol.EProtocol_Error,onError);

			
			Register(EError.EError_OtherOneLogin,onOtherLogin);
			Register(EError.EError_nameExist,onDoubleName);
			Register(EError.EError_userNotExist,onNoUser);
			Register(EError.EError_nameLengthInvalid,onLengthOver);
		}
		
		
		/**
		 * 名字过长  
		 * @param err
		 * 
		 */
		private function onLengthOver(err:SError):void{
			
			ShowError(err);
		}
		

		
		/**
		 * 没有用户  
		 * @param err
		 * 
		 */
		private function onNoUser(err:SError):void{
			
//			ShowError(err);
			Publish(new ModuleEvent(ModuleEvent.SHOW,GameData.ModuleID['VRegister']));
		}
		/**
		 * 注册名字呗占用 
		 * @param err
		 * 
		 */
		private function onDoubleName(err:SError):void{
			ShowError(err);
		}
		
		/**
		 * 显示错误  
		 * @param type
		 * 
		 */
		private function ShowError(err:SError):void{
			
			Publish(new RegisterEvent(RegisterEvent.DOUBLE_NAME,ErrorInfo.Msg[err.errno]));
		}
		
		
		
		/**
		 * 被其他人占用  
		 * @param err
		 * 
		 */
		private function onOtherLogin(err:SError):void{
			LogInfo("有其他人登陆此账号 .");
		}
		 
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		/**
		 * 注册代理  
		 * @param proxy
		 * 
		 */
		private function Register(errno:int,proxy:Function ):void{
			errProxy[errno]=proxy;
		}
		
		
		
		
		
		
		/**
		 * 错误消息处理  
		 * @param byte
		 * 
		 */
		private function onError(byte:ByteArray):void{
			var error:SError=new SError();
			byte.position=0;
			error.Unserialize(byte);
			LogInfo("错误处理 错误id为:",error.errno);
			/*switch(error.errno){
				case EError.EError_userNotExist:
					//不存在 
					Publish(new ModuleEvent(ModuleEvent.SHOW,GameData.M_RegisterID));
//					Publish(new RegisterUserEvent(RegisterUserEvent.REGISTER,"REX2",0,0));
					break;
				
				case EError.EError_nameExist:
					//名字已经存在注册失败 
					Publish(new RegisterEvent(RegisterEvent.DOUBLE_NAME));
					break;
				default:
					
					LogInfo("错误处理 错误id为:",error.errno);
					break;
				
			}
			*/
			errProxy[error.errno]&&errProxy[error.errno](error);
		}
	}
}